// pages/goods/goods.js
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    book: {}, //商品详情信息
    shopNum: 0, //购物车的总商品数量
    hideShopPopup: true, //是否显示购买模态框
    buyNumber: 1, //加入购物车的数量
    buyNumMin: 1, //加入购物车的最小数量
    buyNumMax: 100, //加入购物车的最大数量（库存量)
    shopCarInfo: {}, //购物车信息
    pic: [], // 轮播图,
    width: 0 // 轮播图宽度,
  },


  //加载商品详情
  loadDetail: function (options){
    var that = this;
    // 商品传递过来的id,根据id查询书籍信息及库存信息
    wx.request({
      url: app.serverUrl + '/book/' + options.id,
      method: "GET",
      header: {
        'content-type': 'application/json', // 默认值
      },
      success: res => {
        if (res.data.data != null) {
          var book = res.data.data;
          const width = wx.getSystemInfoSync().screenWidth; //获取屏幕宽度
          that.setData({
            book:book,
            width:width,
            pic: book.pic.split(","),
            buyNumMax: book.stock
          })
        }
      },
      fail: error => {
        wx.hideLoading({
          title: '与网络断开连接'
        })
      }
    })
  },

  //加载购物车
  loadShopCart:function(){
    let that = this;
    if (app.getHasLogin() == false){
      that.setData({
        shopCarInfo: {},
        shopNum: 0
      })
    }else{
      wx.request({
        url: app.serverUrl + '/cart/query/' + app.getGlobalUserInfo().id,
        method: "GET",
        header: {
          'content-type': 'application/json', // 默认值
        },
        success: res => {
          if (res.data.data != null) {
            that.setData({
              shopCarInfo: res.data.data,
              shopNum: res.data.data.shopNum
            })
          }
        },
        fail: error => {
          wx.hideLoading({
            title: '与网络断开连接'
          })
        }
      })
    }
  },

  /** 跳转到购物车*/
  goShopCar() {
    if (app.getHasLogin() == false) {
      wx.showToast({
        title: '未登录',
        icon: 'none',
        duration: 2000  //持续的时间
      })
      return;
    }
    wx.reLaunch({
      url: "/pages/cart/cart"
    });
  },

  /** 规格选择弹出框*/
  toAddShopCar() {
    //规格选择弹出框
    this.bindGuiGeTap()
  },

  /**规格选择弹出框*/
  bindGuiGeTap() {
    var that = this;
    //查询redis中的库存
    wx.request({
      url: app.serverUrl + '/book/stock/' + this.data.book.id,
      method: "GET",
      header: {
        'content-type': 'application/json', // 默认值
      },
      success: res => {
        if (res.data.data != null) {
          that.setData({
            buyNumMax: res.data.data,
            hideShopPopup: false
          })
        }
      },
      fail: error => {
        wx.hideLoading({
          title: '与网络断开连接'
        })
      }
    })
  },

  /**规格选择弹出框隐藏*/
  closePopupTap() {
    this.setData({
      hideShopPopup: true
    })
  },

  /** 减少购买数量*/
  reduce() {
    //判断
    let buyNumber = this.data.buyNumber;
    if (buyNumber > this.data.buyNumMin) {
      buyNumber--;
      this.setData({
        buyNumber
      })
    }
  },
  /** 增加购买数量 */
  add() {
    let buyNumber = this.data.buyNumber;
    if (buyNumber < this.data.buyNumMax) {
      buyNumber++;
      this.setData({
        buyNumber
      })
    }
  },

  //缓存购物车
  saveCart: function (shopCarInfo){
    let that = this;
    wx.request({
      url: app.serverUrl + '/cart/save',
      method: "POST",
      header: {
        'content-type': 'application/json', // 默认值
      },
      data:shopCarInfo,
      fail: error => {
        wx.hideLoading({
          title: '与网络断开连接'
        })
      },
      success: res => {
        if(res.data.status != 200){
          console.log(res.data.errMsg);
        }
      }
    })
  },

//获取用户购买数量
  getBuyNum(e){
    if (e.detail.value != null && e.detail.value != ""){
      this.setData({
        buyNumber: parseInt(e.detail.value)
      })
    }
  },

  /** 加入购物车 */
  addShopCar() {
    if (app.getHasLogin() == false){
      wx.showToast({
        title: '未登录',
        icon: 'none',
        duration: 2000  //持续的时间
      })
      return;
    }

    //判断库存
    let data = this.data.shopCarInfo.shopList;   //购物车列表信息
    if(data != null){ //购物车存在
      let book = this.data.book;  //该商品信息
      var b = false;
      for (let i = 0; i < data.length; i++) {
        if (data[i].bookId == book.id) {  //如果购物车存在该商品
          b = true;
          let max = this.data.buyNumMax;  //库存
          let isTrue = max < (this.data.buyNumber + data[i].bookQuantity); //选择的数量 + 购物车该商品的数量
          if (isTrue) {
            wx.showToast({
              title: '超出库存最大数量,请前往购物车查看',
              icon: 'none',
              duration: 2000  //持续的时间
            })
            return;
          }
        }
      }
      if(!b){
        if (this.data.buyNumMax < this.data.buyNumber) {
          wx.showToast({
            title: '超出库存最大数量,请前往购物车查看',
            icon: 'none',
            duration: 2000  //持续的时间
          })
          return;
        }
      }
    }

    //构造购物车对象
    var shopCarInfo = this.bulidShopCarInfo();
    this.setData({
      shopCarInfo: shopCarInfo,
      shopNum: shopCarInfo.shopNum,
      buyNumber: 1
    });
    
    // 写入redis缓存
    this.saveCart(shopCarInfo);

    // 关闭规格框
    this.closePopupTap();
    wx.showToast({
      title: '加入书单成功',
      icon: 'success',
      duration: 2000
    })
  },

  /** 构建购物车信息*/
  bulidShopCarInfo() {
    // 商品加入购物车时准备的商品信息，单个
    var shopCarMap = {};
    shopCarMap.bookId = this.data.book.id;
    shopCarMap.bookIcon = this.data.book.icon;
    shopCarMap.bookName = this.data.book.name;
    shopCarMap.bookPrice = this.data.book.price;
    shopCarMap.active = true; // 判断商品是否选中
    shopCarMap.bookQuantity = this.data.buyNumber;
    shopCarMap.delActive = false; // 判断商品删除时是否选中

    // 获取原的购物车信息
    var shopCarInfo = this.data.shopCarInfo;
    // 判读原购物车信息是否有初始化信息，如果不存在，就初始化数据，设置购买数量为 0
    if (!shopCarInfo.shopNum) {
      shopCarInfo.shopNum = 0;
    }
    // 判读原购物车信息是否有初始化信息，如果不存在，就初始化数据，设置购买数量为 0
    if (!shopCarInfo.shopList) {
      shopCarInfo.shopList = [];
    }
    // 判断是否有同样的物品
    var hasSameBookIndex = -1;
    for (var i = 0; i < shopCarInfo.shopList.length; i++) {
      var tmpShopCarMap = shopCarInfo.shopList[i];
      // 如果在遍历商品列表中，如果id一致，就将购买数量加入
      if (tmpShopCarMap.bookId == shopCarMap.bookId) {
        hasSameBookIndex = i
        // 新的商品购物车信息
        shopCarMap.bookQuantity += tmpShopCarMap.bookQuantity
        break
      }
    }
    // 购物车购买的总数量，等于原数量加上现在购买的数量  这里不能用 shopCarMap.bookQuantity 的数量
    shopCarInfo.shopNum += this.data.buyNumber;
    if (hasSameBookIndex > -1) {
      //如果商品存在，则找到对应商品的位置，删除他，再替换成 新的信息商品
      shopCarInfo.shopList.splice(hasSameBookIndex, 1, shopCarMap);
    } else {
      //不过商品不存在，则 将商品信息直接加入到列表中
      shopCarInfo.shopList.push(shopCarMap);
    }

    shopCarInfo.uid = app.getGlobalUserInfo().id;
    //返回购物车信息
    return shopCarInfo;
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.loadDetail(options); //加载商品详情
    this.loadShopCart();  //获取缓存购物车的内容
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})